/* 
除了常见的闭包写法，还有使用代理的方式。
但只有在必要时才使用代理。


*/

var createCounter = function (init) {
  let currentCount = init
  return new Proxy({}, {
    get: (target, key) => {
      switch (key) {
        case "increment": return () => ++currentCount;
        case "decrement": return () => --currentCount;
        case "reset": return () => (currentCount = init);
        default: throw Error("Unexpected Method")
      }
    }
  })
}

let cnt = createCounter(10)
cnt.increment(); // 11
cnt.reset(); // 10
cnt.decrement(); // 9